TypeScriptã®ãããåãæŽ»çšããŠãªããžã§ã¯ãã®åœ¢ç¶ãåçã«å€æããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³åãã®å ç¢ã§ä¿å®æ§ã®é«ãã³ãŒããå®çŸããæ¹æ³ãåŠã³ãŸãã
TypeScriptã®ãããåã«ããåçãªããžã§ã¯ã倿ïŒå æ¬çã¬ã€ã
éçåä»ãã匷åã«éèŠããTypeScriptã¯ãéçºè ãããä¿¡é Œæ§ãé«ãä¿å®ããããã³ãŒããæžãããšãå¯èœã«ããŸãããã®å®çŸã«å€§ããè²¢ç®ããéèŠãªæ©èœããããåã§ããæ¬ã¬ã€ãã§ã¯ãTypeScriptã®ãããåã®äžçãæ·±ãæãäžããç¹ã«ã°ããŒãã«ãªãœãããŠã§ã¢ãœãªã¥ãŒã·ã§ã³éçºã®æèã«ãããŠããã®æ©èœãå©ç¹ãå®è·µçãªå¿çšã«ã€ããŠå æ¬çã«è§£èª¬ããŸãã
ã³ã¢ã³ã³ã»ããã®çè§£
ãããåã®æ žå¿ã¯ãæ¢åã®åã®ããããã£ã«åºã¥ããŠæ°ããåãäœæã§ããç¹ã«ãããŸããå¥ã®åã®ããŒãå埩åŠçããå€ã«å€æãé©çšããããšã§æ°ããåãå®çŸ©ããŸããããã¯ãããããã£ã®ããŒã¿åã倿Žããããããããã£ããªãã·ã§ãã«ã«ããããæ¢åã®ããããã£ã«åºã¥ããŠæ°ããããããã£ã远å ããããããªã©ããªããžã§ã¯ãã®æ§é ãåçã«å€æŽããå¿ èŠãããã·ããªãªã§éåžžã«åœ¹ç«ã¡ãŸãã
ãŸãã¯åºæ¬ããå§ããŸããããç°¡åãªã€ã³ã¿ãŒãã§ãŒã¹ãèããŸãïŒ
interface Person {
name: string;
age: number;
email: string;
}
ã§ã¯ãPerson
ã®ãã¹ãŠã®ããããã£ããªãã·ã§ãã«ã«ãããããåãå®çŸ©ããŠã¿ãŸãããïŒ
type OptionalPerson = {
[K in keyof Person]?: Person[K];
};
ãã®äŸã§ã¯ïŒ
[K in keyof Person]
ã¯ãPerson
ã€ã³ã¿ãŒãã§ãŒã¹ã®åããŒïŒname
ãage
ãemail
ïŒãå埩åŠçããŸãã?
ã¯åããããã£ããªãã·ã§ãã«ã«ããŸããPerson[K]
ã¯ãå ã®Person
ã€ã³ã¿ãŒãã§ãŒã¹ã«ãããããããã£ã®åãåç §ããŸãã
çµæãšããŠåŸãããOptionalPerson
åã¯ãäºå®äžãã®ããã«ãªããŸãïŒ
{
name?: string;
age?: number;
email?: string;
}
ããã¯ãæ¢åã®åãåçã«å€æŽãããããåã®åŒ·åãã瀺ããŠããŸãã
ãããåã®æ§æãšæ§é
ãããåã®æ§æã¯éåžžã«ç¹æ®ã§ãäžè¬çã«æ¬¡ã®æ§é ã«åŸããŸãïŒ
type NewType = {
[Key in KeysType]: ValueType;
};
åæ§æèŠçŽ ãåè§£ããŠã¿ãŸãããïŒ
NewType
: äœæãããæ°ããåã«å²ãåœãŠãååã§ãã[Key in KeysType]
: ããããããåã®äžæ žã§ããKey
ã¯KeysType
ã®åã¡ã³ããŒãå埩åŠçãã倿°ã§ããKeysType
ã¯ãå€ãã®å ŽåïŒãã ãåžžã«ã§ã¯ãããŸãããïŒãOptionalPerson
ã®äŸã®ããã«ãå¥ã®åã®keyof
ãšãªããŸããæååãªãã©ã«ã®ãŠããªã³ããããè€éãªåã«ããããšãå¯èœã§ããValueType
: æ°ããåã«ãããããããã£ã®åãæå®ããŸããããã¯çŽæ¥çãªåïŒstring
ãªã©ïŒãå ã®åã®ããããã£ã«åºã¥ãåïŒPerson[K]
ãªã©ïŒããŸãã¯å ã®åãããè€éã«å€æããåã«ããããšãã§ããŸãã
äŸïŒããããã£ã®åã倿ãã
ãªããžã§ã¯ãã®ãã¹ãŠã®æ°å€ããããã£ãæååã«å€æããå¿ èŠããããšæ³åããŠãã ããããããåã䜿çšãããšã次ã®ããã«å®çŸã§ããŸãïŒ
interface Product {
id: number;
name: string;
price: number;
quantity: number;
}
type StringifiedProduct = {
[K in keyof Product]: Product[K] extends number ? string : Product[K];
};
ãã®ã±ãŒã¹ã§ã¯ã以äžã®ããšãè¡ã£ãŠããŸãïŒ
Product
ã€ã³ã¿ãŒãã§ãŒã¹ã®åããŒãå埩åŠçããŸãã- æ¡ä»¶ä»ãåïŒ
Product[K] extends number ? string : Product[K]
ïŒã䜿çšããŠãããããã£ãæ°å€ã§ãããã©ããããã§ãã¯ããŸãã - æ°å€ã§ããã°ãããããã£ã®åã
string
ã«èšå®ããããã§ãªããã°å ã®åãç¶æããŸãã
çµæãšããŠåŸãããStringifiedProduct
åã¯æ¬¡ã®ããã«ãªããŸãïŒ
{
id: string;
name: string;
price: string;
quantity: string;
}
äž»ãªæ©èœãšãã¯ããã¯
1. keyof
ãšã€ã³ããã¯ã¹ã·ã°ããã£ã®äœ¿çš
åã«ç€ºããããã«ãkeyof
ã¯ãããåãæ±ãããã®åºæ¬çãªããŒã«ã§ããããã«ãããåã®ããŒãå埩åŠçã§ããŸããã€ã³ããã¯ã¹ã·ã°ããã£ã¯ãããŒãäºåã«ããããªãå Žåã§ãããããã倿ããããšãã«ããããã£ã®åãå®çŸ©ããæ¹æ³ãæäŸããŸãã
äŸïŒã€ã³ããã¯ã¹ã·ã°ããã£ã«åºã¥ããŠãã¹ãŠã®ããããã£ã倿ãã
interface StringMap {
[key: string]: number;
}
type StringMapToString = {
[K in keyof StringMap]: string;
};
ããã§ã¯ãStringMapå ã®ãã¹ãŠã®æ°å€ãæ°ããåã®äžã§æååã«å€æãããŸãã
2. ãããåå ã§ã®æ¡ä»¶ä»ãå
æ¡ä»¶ä»ãåã¯ãæ¡ä»¶ã«åºã¥ããŠåã®é¢ä¿ã衚çŸã§ããTypeScriptã®åŒ·åãªæ©èœã§ãããããåãšçµã¿åãããããšã§ãéåžžã«é«åºŠãªå€æãå¯èœã«ãªããŸãã
äŸïŒåããNullãšUndefinedãåé€ãã
type NonNullableProperties = {
[K in keyof T]: T[K] extends (null | undefined) ? never : T[K];
};
ãã®ãããåã¯ãåT
ã®ãã¹ãŠã®ããŒãå埩åŠçããæ¡ä»¶ä»ãåã䜿çšããŠå€ãnullãŸãã¯undefinedã蚱容ãããã©ããããã§ãã¯ããŸãã蚱容ããå Žåãåã¯neverãšè©äŸ¡ããããã®ããããã£ã¯äºå®äžåé€ãããŸãããã以å€ã®å Žåã¯ãå
ã®åãç¶æãããŸãããã®ã¢ãããŒãã¯ãåé¡ãšãªãå¯èœæ§ã®ããnullãŸãã¯undefinedã®å€ãæé€ããããšã§åãããå
ç¢ã«ããã³ãŒãã®å質ãåäžãããã°ããŒãã«ãªãœãããŠã§ã¢éçºã®ãã¹ããã©ã¯ãã£ã¹ã«æ²¿ã£ããã®ã«ããŸãã
3. å¹çåã®ããã®ãŠãŒãã£ãªãã£å
TypeScriptã¯ãäžè¬çãªåæäœã¿ã¹ã¯ãç°¡çŽ åããçµã¿èŸŒã¿ã®ãŠãŒãã£ãªãã£åãæäŸããŠããŸãããããã®åã¯ãå éšã§ãããåãæŽ»çšããŠããŸãã
Partial
: åT
ã®ãã¹ãŠã®ããããã£ããªãã·ã§ãã«ã«ããŸãïŒåã®äŸã§ç€ºããŸããïŒãRequired
: åT
ã®ãã¹ãŠã®ããããã£ãå¿ é ã«ããŸããReadonly
: åT
ã®ãã¹ãŠã®ããããã£ãèªã¿åãå°çšã«ããŸããPick
: åT
ããæå®ãããããŒïŒK
ïŒã®ã¿ãæã€æ°ããåãäœæããŸããOmit
: åT
ããæå®ãããããŒïŒK
ïŒãé€ãããã¹ãŠã®ããããã£ãæã€æ°ããåãäœæããŸãã
äŸïŒPick
ãšOmit
ã®äœ¿çš
interface User {
id: number;
name: string;
email: string;
role: string;
}
type UserSummary = Pick;
// { id: number; name: string; }
type UserWithoutEmail = Omit;
// { id: number; name: string; role: string; }
ãããã®ãŠãŒãã£ãªãã£åã¯ãå埩çãªãããåã®å®çŸ©ãæžãæéãçããã³ãŒãã®å¯èªæ§ãåäžãããŸãããããã¯ããŠãŒã¶ãŒã®æš©éãã¢ããªã±ãŒã·ã§ã³ã®ã³ã³ããã¹ãã«åºã¥ããŠãç°ãªããã¥ãŒãããŒã¿ã¢ã¯ã»ã¹ã¬ãã«ã管çããã°ããŒãã«éçºã«ãããŠç¹ã«åœ¹ç«ã¡ãŸãã
å®äžçã§ã®å¿çšäŸ
1. ããŒã¿æ€èšŒãšå€æ
ãããåã¯ãå€éšãœãŒã¹ïŒAPIãããŒã¿ããŒã¹ããŠãŒã¶ãŒå ¥åïŒããåãåã£ãããŒã¿ãæ€èšŒããã³å€æããããã«éåžžã«äŸ¡å€ããããŸããããã¯ãããŸããŸãªãœãŒã¹ããã®ããŒã¿ãæ±ãå¯èœæ§ããããããŒã¿ã®æŽåæ§ã確ä¿ããå¿ èŠãããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ãããŠäžå¯æ¬ ã§ããããŒã¿åã®æ€èšŒãªã©ã®ç¹å®ã®ã«ãŒã«ãå®çŸ©ãããããã®ã«ãŒã«ã«åºã¥ããŠããŒã¿æ§é ãèªåçã«å€æŽã§ããŸãã
äŸïŒAPIã¬ã¹ãã³ã¹ã®å€æ
interface ApiResponse {
userId: string;
id: string;
title: string;
completed: boolean;
}
type CleanedApiResponse = {
[K in keyof ApiResponse]:
K extends 'userId' | 'id' ? number :
K extends 'title' ? string :
K extends 'completed' ? boolean : any;
};
ãã®äŸã§ã¯ãïŒAPIããå
ã
æååã ã£ãïŒuserId
ãšid
ããããã£ãæ°å€ã«å€æããŸããtitle
ããããã£ã¯æ£ããæåååã«ãcompleted
ã¯ããŒã«å€ã®ãŸãŸç¶æãããŸããããã«ãããããŒã¿ã®äžè²«æ§ã確ä¿ãããåŸç¶ã®åŠçã§ã®æœåšçãªãšã©ãŒãåé¿ã§ããŸãã
2. åå©çšå¯èœãªã³ã³ããŒãã³ãã®Propsäœæ
Reactãä»ã®UIãã¬ãŒã ã¯ãŒã¯ã§ã¯ããããåã¯åå©çšå¯èœãªã³ã³ããŒãã³ãã®Propsäœæãç°¡çŽ åã§ããŸããããã¯ãç°ãªããã±ãŒã«ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ã«é©å¿ããå¿ èŠãããã°ããŒãã«ãªUIã³ã³ããŒãã³ããéçºããéã«ç¹ã«éèŠã§ãã
äŸïŒããŒã«ãªãŒãŒã·ã§ã³ã®åŠç
interface TextProps {
textId: string;
defaultText: string;
locale: string;
}
type LocalizedTextProps = {
[K in keyof TextProps as `localized-${K}`]: TextProps[K];
};
ãã®ã³ãŒãã§ã¯ãæ°ããåLocalizedTextProps
ãTextProps
ã®åããããã£åã®åã«æ¥é èŸãä»ããŸããäŸãã°ãtextId
ã¯localized-textId
ã«ãªããããã¯ã³ã³ããŒãã³ãã®Propsãèšå®ããã®ã«åœ¹ç«ã¡ãŸãããã®ãã¿ãŒã³ã¯ããŠãŒã¶ãŒã®ãã±ãŒã«ã«åºã¥ããŠåçã«ããã¹ãã倿Žã§ããPropsãçæããããã«äœ¿çšã§ããŸããããã¯ãeã³ããŒã¹ã¢ããªã±ãŒã·ã§ã³ãåœéçãªãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ãªã©ãç°ãªãå°åãèšèªã§ã·ãŒã ã¬ã¹ã«æ©èœããå€èšèªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã倿ãããPropsã¯ãéçºè
ãããŒã«ãªãŒãŒã·ã§ã³ããã詳现ã«å¶åŸ¡ããäžçäžã§äžè²«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœæããèœåãæäŸããŸãã
3. åçãªãã©ãŒã çæ
ãããåã¯ãããŒã¿ã¢ãã«ã«åºã¥ããŠãã©ãŒã ãã£ãŒã«ããåçã«çæããã®ã«åœ¹ç«ã¡ãŸããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããã¯ç°ãªããŠãŒã¶ãŒããŒã«ãããŒã¿èŠä»¶ã«é©å¿ãããã©ãŒã ãäœæããã®ã«åœ¹ç«ã¡ãŸãã
äŸïŒãªããžã§ã¯ãããŒã«åºã¥ããã©ãŒã ãã£ãŒã«ãã®èªåçæ
interface UserProfile {
firstName: string;
lastName: string;
email: string;
phoneNumber: string;
}
type FormFields = {
[K in keyof UserProfile]: {
label: string;
type: string;
required: boolean;
};
};
ããã«ãããUserProfile
ã€ã³ã¿ãŒãã§ãŒã¹ã®ããããã£ã«åºã¥ããŠãã©ãŒã æ§é ãå®çŸ©ã§ããŸããããã«ããããã©ãŒã ãã£ãŒã«ããæåã§å®çŸ©ããå¿
èŠããªããªããã¢ããªã±ãŒã·ã§ã³ã®æè»æ§ãšä¿å®æ§ãåäžããŸãã
é«åºŠãªãããåãã¯ããã¯
1. ããŒã®ãªãããã³ã°
TypeScript 4.1ã§ã¯ããããåã«ããŒã®ãªãããã³ã°ãå°å ¥ãããŸãããããã«ãããåã倿ããªããããŒã®ååã倿Žã§ããŸããããã¯ãåãç°ãªãAPIèŠä»¶ã«é©å¿ãããå ŽåãããããŠãŒã¶ãŒãã¬ã³ããªãŒãªããããã£åãäœæãããå Žåã«ç¹ã«åœ¹ç«ã¡ãŸãã
äŸïŒããããã£åã®å€æŽ
interface Product {
productId: number;
productName: string;
productDescription: string;
price: number;
}
type ProductDto = {
[K in keyof Product as `dto_${K}`]: Product[K];
};
ããã«ãããProduct
åã®åããããã£ã®ååãdto_
ã§å§ãŸãããã«å€æŽãããŸããããã¯ãç°ãªãåœåèŠåã䜿çšããããŒã¿ã¢ãã«ãšAPIã®éã§ãããã³ã°ãè¡ãéã«äŸ¡å€ããããŸããç¹å®ã®åœåèŠåãæã€å¯èœæ§ã®ããè€æ°ã®ããã¯ãšã³ãã·ã¹ãã ãšé£æºããåœéçãªãœãããŠã§ã¢éçºã«ãããŠãã¹ã ãŒãºãªçµ±åãå¯èœã«ããããã«éèŠã§ãã
2. æ¡ä»¶ä»ãããŒãªãããã³ã°
ããŒã®ãªãããã³ã°ãæ¡ä»¶ä»ãåãšçµã¿åãããããšã§ãããè€éãªå€æãå¯èœã«ãªããç¹å®ã®åºæºã«åºã¥ããŠããããã£ã®ååã倿Žãããé€å€ãããã§ããŸãããã®ãã¯ããã¯ã«ãããé«åºŠãªå€æãå¯èœã«ãªããŸãã
äŸïŒDTOããããããã£ãé€å€ãã
interface Product {
id: number;
name: string;
description: string;
price: number;
category: string;
isActive: boolean;
}
type ProductDto = {
[K in keyof Product as K extends 'description' | 'isActive' ? never : K]: Product[K]
}
ããã§ã¯ãããããã£ã'description'ãŸãã¯'isActive'ã®å ŽåãããŒãnever
ã«è§£æ±ºããããããdescription
ãšisActive
ããããã£ã¯çæãããProductDto
åããäºå®äžåé€ãããŸããããã«ãããç°ãªãæäœã«å¿
èŠãªããŒã¿ã®ã¿ãå«ãç¹å®ã®ããŒã¿è»¢éãªããžã§ã¯ãïŒDTOïŒãäœæã§ããŸãããã®ãããªéžæçãªããŒã¿è»¢éã¯ãã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã«ãããæé©åãšãã©ã€ãã·ãŒã«ãšã£ãŠäžå¯æ¬ ã§ããããŒã¿è»¢éã®å¶éã«ãããé¢é£ããŒã¿ã®ã¿ããããã¯ãŒã¯çµç±ã§éä¿¡ãããããã垯åå¹
ã®äœ¿çšéãåæžããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸããããã¯ãã°ããŒãã«ãªãã©ã€ãã·ãŒèŠå¶ã«ãæºæ ããŠããŸãã
3. ãããåãšãžã§ããªã¯ã¹ã®äœ¿çš
ãããåã¯ãžã§ããªã¯ã¹ãšçµã¿åãããããšã§ãéåžžã«æè»ã§åå©çšå¯èœãªåå®çŸ©ãäœæã§ããŸããããã«ãããããŸããŸãªåãåŠçã§ããã³ãŒããæžãããšãã§ããã³ãŒãã®åå©çšæ§ãšä¿å®æ§ãå€§å¹ ã«åäžããŸããããã¯ãå€§èŠæš¡ãªãããžã§ã¯ããåœéçãªããŒã ã«ãããŠç¹ã«äŸ¡å€ããããŸãã
äŸïŒãªããžã§ã¯ãããããã£ã倿ãããžã§ããªãã¯é¢æ°
function transformObjectValues(obj: T, transform: (value: T[K]) => U): {
[P in keyof T]: U;
} {
const result: any = {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
result[key] = transform(obj[key]);
}
}
return result;
}
interface Order {
id: number;
items: string[];
total: number;
}
const order: Order = {
id: 123,
items: ['apple', 'banana'],
total: 5.99,
};
const stringifiedOrder = transformObjectValues(order, (value) => String(value));
// stringifiedOrder: { id: string; items: string; total: string; }
ãã®äŸã§ã¯ãtransformObjectValues
颿°ã¯ãžã§ããªã¯ã¹ïŒT
ãK
ãU
ïŒãå©çšããŠãåT
ã®ãªããžã§ã¯ãïŒobj
ïŒãšãTã®åäžã®ããããã£ãåãåããåUã®å€ãè¿ã倿颿°ãåããŸãããã®é¢æ°ã¯ãå
ã®ãªããžã§ã¯ããšåãããŒãæã€ããå€ãåUã«å€æãããæ°ãããªããžã§ã¯ããè¿ããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšèæ ®äºé
1. åã®å®å šæ§ãšã³ãŒãã®ä¿å®æ§
TypeScriptãšãããåã®æå€§ã®å©ç¹ã®äžã€ã¯ãåã®å®å šæ§ãåäžããããšã§ããæç¢ºãªåãå®çŸ©ããããšã§ãéçºã®æ©ã段éã§ãšã©ãŒãæããå®è¡æãã°ã®å¯èœæ§ãæžãããŸããããã«ãããç¹ã«å€§èŠæš¡ãªãããžã§ã¯ãã«ãããŠãã³ãŒãã®æšè«ããªãã¡ã¯ã¿ãªã³ã°ã容æã«ãªããŸããããã«ããããåã䜿çšããããšã§ããœãããŠã§ã¢ãäžçäžã®æ°çŸäžäººã®ãŠãŒã¶ãŒã®ããŒãºã«é©å¿ããŠã¹ã±ãŒã«ã¢ããããéã«ãã³ãŒãããšã©ãŒãèµ·ããã«ãããªããŸãã
2. å¯èªæ§ãšã³ãŒãã¹ã¿ã€ã«
ãããåã¯åŒ·åã§ãããæç¢ºã§èªã¿ãããæ¹æ³ã§æžãããšãäžå¯æ¬ ã§ããæå³ã®ãã倿°åã䜿ããè€éãªå€æã®ç®çã説æããããã«ã³ãŒãã«ã³ã¡ã³ããä»ããŸããããã³ãŒãã®æçãã¯ãããããèæ¯ãæã€éçºè ãã³ãŒããèªãã§çè§£ã§ããããšãä¿èšŒããŸããã¹ã¿ã€ãªã³ã°ãåœåèŠåããã©ãŒãããã®äžè²«æ§ã¯ãã³ãŒãããã芪ãã¿ãããããç¹ã«åœéçãªããŒã ã§ãœãããŠã§ã¢ã®ç°ãªãéšåãç°ãªãã¡ã³ããŒãäœæ¥ããå Žåã«ãããã¹ã ãŒãºãªéçºããã»ã¹ã«è²¢ç®ããŸãã
3. é床ã®äœ¿çšãšè€éã
ãããåã®é床ã®äœ¿çšã¯é¿ããŠãã ããã匷åã§ã¯ãããŸãããé床ã«äœ¿çšããããããç°¡åãªè§£æ±ºçãããå Žåã«äœ¿çšãããšãã³ãŒããèªã¿ã«ãããªãå¯èœæ§ããããŸããåçŽãªã€ã³ã¿ãŒãã§ãŒã¹å®çŸ©ããŠãŒãã£ãªãã£é¢æ°ã®æ¹ãé©åãªè§£æ±ºçã§ã¯ãªãããæ€èšããŠãã ãããåãé床ã«è€éã«ãªããšãçè§£ãç¶æããã®ãå°é£ã«ãªãå¯èœæ§ããããŸããåžžã«åã®å®å šæ§ãšã³ãŒãã®å¯èªæ§ã®ãã©ã³ã¹ãèæ ®ããŠãã ããããã®ãã©ã³ã¹ãåãããšã§ãåœéçãªããŒã ã®ãã¹ãŠã®ã¡ã³ããŒã广çã«ã³ãŒãããŒã¹ãèªã¿ãçè§£ããç¶æã§ããããã«ãªããŸãã
4. ããã©ãŒãã³ã¹
ãããåã¯äž»ã«ã³ã³ãã€ã«æã®åãã§ãã¯ã«åœ±é¿ããéåžžãå®è¡æã®ããã©ãŒãã³ã¹ã«å€§ããªãªãŒããŒããããããããããšã¯ãããŸãããããããé床ã«è€éãªåæäœã¯ãã³ã³ãã€ã«ããã»ã¹ãé ãããå¯èœæ§ããããŸããç¹ã«å€§èŠæš¡ãªãããžã§ã¯ãããç°ãªãã¿ã€ã ãŸãŒã³ã«åæ£ãããªãœãŒã¹å¶çŽãç°ãªãããŒã ã®å Žåãè€éããæå°éã«æãããã«ãæéãžã®åœ±é¿ãèæ ®ããŠãã ããã
çµè«
TypeScriptã®ãããåã¯ããªããžã§ã¯ãã®åœ¢ç¶ãåçã«å€æããããã®åŒ·åãªããŒã«ã»ãããæäŸããŸãããããã¯ãç¹ã«è€éãªããŒã¿ã¢ãã«ãAPIãšã®é£æºãUIã³ã³ããŒãã³ãéçºãæ±ãéã«ãåå®å šã§ä¿å®æ§ãé«ããåå©çšå¯èœãªã³ãŒããæ§ç¯ããããã«éåžžã«äŸ¡å€ããããŸãããããåãç¿åŸããããšã§ãããå ç¢ã§é©å¿æ§ã®é«ãã¢ããªã±ãŒã·ã§ã³ãäœæããã°ããŒãã«åžå Žåãã®ããè¯ããœãããŠã§ã¢ãæ§ç¯ã§ããŸããåœéçãªããŒã ãã°ããŒãã«ãããžã§ã¯ãã«ãšã£ãŠããããåã®äœ¿çšã¯å ç¢ãªã³ãŒãå質ãšä¿å®æ§ãæäŸããŸããããã§èª¬æããæ©èœã¯ãé©å¿æ§ãããã¹ã±ãŒã©ãã«ãªãœãããŠã§ã¢ãæ§ç¯ããã³ãŒãã®ä¿å®æ§ãåäžãããäžçäžã®ãŠãŒã¶ãŒã«ããè¯ãäœéšãåµé ããããã«äžå¯æ¬ ã§ãããããåã¯ãæ°ããæ©èœãAPIããŸãã¯ããŒã¿ã¢ãã«ã远å ãŸãã¯å€æŽããããšãã«ãã³ãŒãã®æŽæ°ã容æã«ããŸãã